home *** CD-ROM | disk | FTP | other *** search
- From: rstevew@armory.com (Richard Steven Walz)
- Subject: Re: Generating MIDI signals
- Date: Thu, 29 Sep 1994 15:17:11 GMT
-
- In article <1994Sep24.032622.20528@cs.mun.ca>,
- Ian Robert Janes <ijanes@cs.mun.ca> wrote:
- >Ian
- --------------------------------------------
- Your subject line says you want to know how to generate MIDI signals.
- Here's the MIDI spec 1.0 to start you off. Then there's a cute hack that
- involves just changing the crystal on a serial port card to MIDI compatible
- bit rates. It's after the end of the spec.
- -Steve Walz rstevew@armory.com
- ----------------------------------------
-
- (Call IMA and order your copy of this
- specification, which offers
- additional information NOT contained in
- this file, to include important
- diagrams and graphs,...etc.)
-
- MIDI
- MUSICAL INSTRUMENT DIGITAL INTERFACE
-
- Specification 1.0
- INTRODUCTION
-
- MIDI is the acronym for Musical Instrument Digital Interface.
-
- MIDI enables synthesizers, sequencers, home computers, rhythm machines, etc.
- to be intercon- nected through a standard interface.
-
- Each MIDI-equipped instrument usually contains a receiver and a transmitter.
- Some instruments may contain only a receiver or transmitter. The receiver
- receives messages in MIDI format and executes MIDI commands. It consists of an
- optoisolator, Universal Asynchronous Receiver/Transmitter (UART), and other
- hardware needed to perform the intended functions. The transmitter originates
- messages in MIDI format, and transmits them by way of a UART and line driver.
-
- The MIDI standard hardware and data format are defined in this specification.
-
-
- CONVENTIONS
-
- Status and Data bytes given in Tables I through VI are given in binary.
-
- Numbers followed by an "H" are in hexadecimal.
-
- All other numbers are in decimal.
-
-
- HARDWARE
-
- The interface operates at 31.25 (+/- 1%) Kbaud, asynchronous, with a start
- bit, 8 data bits (D0 to D7), and a stop bit. This makes a total of 10 bits for
- a period of 320 microseconds per serial byte.
-
- Circuit: 5 mA current loop type. Logical 0 is current ON. One output shall
- drive one and only one input. The receiver shall be opto-isolated and require
- less than 5 mA to turn on. Sharp PC-900 and HP 6N138 optoisolators have been
- found acceptable. Other high-speed optoisolators may be satisfactory. Rise
- and fall times should be less than 2 microseconds.
-
- Connectors: DIN 5 pin (180 degree) female panel mount receptacle. An example
- is the SWITCHCRAFT 57 GB5F. The connectors shall be labelled "MIDI IN" and
- "MIDI OUT". Note that pins 1 and 3 are not used, and should be left
- unconnected in the receiver and transmitter.
-
- NOTES:
-
- 1. Optoisolator is Sharp PC-900.
- (HP 6N138 or other optoisolator can be used with appropriate changes.)
-
- 2. Gates "A" are IC or transistor.
-
- 3. Resistors are 5%
-
-
- Cables shall have a maximum length of fifty feet (15 meters), and shall be
- terminated on each end by a corresponding 5-pin DIN male plug, such as the
- SWITCHCRAFT 05GM5M. The cable shall be shielded twisted pair, with the shield
- connected to pin 2 at both ends.
-
- A "MIDI THRU" output may be provided if needed, which provides a direct copy
- of data coming in MIDI IN. For very long chain lengths (more than three
- instruments), higher-speed optoisolators must be used to avoid additive
- rise/fall time errors which affect pulse width duty cycle.
-
-
- DATA FORMAT
-
- All MIDI communication is acheived through multi-byte "messages" consisting of
- one Status byte followed by one or two Data bytes, except Real-Time and
- Exclusive messages (see below).
-
- MESSAGE TYPES
-
- Messages are divided into two main categories: Channel and System.
-
- Channel
-
- Channel messages contain a four-bit number in the Status byte which address
- the message specifically to one of sixteen channels. These messages are
- thereby intended for any units in a system whose channel number matches the
- channel number encoded into the Status byte.
-
- There are two types of Channel messages: Voice and Mode.
-
- Voice
- To control the instrument's voices, Voice messages are sent
- over the Voice Channels.
-
- Mode
- To define the instrument's response to Voice messages, Mode
- messages are sent over the instument's Basic Channel.
-
-
- System
- System messages are not encoded with channel numbers.
-
- There are three types of System messages: Common, Real-Time, and Exclusive.
-
- Common
- Common messages are intended for all units in a system.
-
- Real-Time
- Real-Time messages are intended for all units in a system.
- They contain Status bytes only -- no Data bytes. Real-Time
- messages may be sent at any time -- even between bytes of a
- message which has a different status. In such cases the
- Real-Time message is either ignored or acted upon, after which
- the receiving process resumes under the previous status.
-
- Exclusive
- Exclusive messages can contain any number of Data bytes, and
- are terminated by an End of Exclusive (EOX) or any other Status
- byte. These messages include a Manufacturer's Identification
- (ID) code. If the receiver does not recognize the ID code, it
- should ignore the ensuing data.
-
- So that other users can fully access MIDI instruments, manufacturers
- should publish the format of data following their ID code. Only the
- manufacturer can update the format following their ID.
-
- DATA TYPES
-
- Status Bytes
-
- Status bytes are eight-bit binary numbers in which the Most Significant Bit
- (MSB) is set (binary 1). Status bytes serve to identify the message type, that
- is, the purpose of the Data bytes which follow the Status byte.
-
- Except for Real-Time messages, new Status bytes will always command the
- receiver to adopt their status, even if the new Status is received before the
- last message was completed.
-
- Running Status
- For Voice and Mode messages only, when a Status byte is
- received and processed, the receiver will remain in that status
- until a different Status byte is received. Therefore, if the same
- Status byte would be repeated, it may (optionally) be omitted so
- that only the correct number of Data bytes need be sent. Under
- Running Status, then, a complete message need only consist of
- specified Data bytes sent in the specified order.
-
- The Running Status feature is especially useful for
- communicating long strings of Note On/Off messages, where
- "Note On with Velocity of 0" is used for Note Off. (A separate
- Note Off Status byte is also available.)
-
- Running Status will be stopped when any other Status byte
- intervenes, except that Real-Time messges will only interrupt
- the Running Status temporarily.
-
- Unimplemented Status
- Any status bytes received for functions which the receiver has not
- implemented should be ignored, and subsequent data bytes ignored.
-
- Undefined Status
- Undefined Status bytes must not be used. Care should be taken to
- prevent illegal messages from being sent during power-up or
- power-down. If undefined Status bytes are received, they
- should be ignored, as should subsequent Data bytes.
-
- Data Bytes
- Following the Status byte, there are (except for Real-Time messages) one or
- two Data bytes which carry the content of the message. Data bytes are
- eight-bit binary numbers in which the MSB is reset (binary 0). The number and
- range of Data bytes which must follow each Status byte are specified in the
- tables which follow. For each Status byte the correct number of Data bytes
- must always be sent. Inside the receiver, action on the message should wait
- until all Data bytes required under the current status are received. Receivers
- should ignore Data bytes which have not been properly preceeded by a valid
- Status byte (with the exception of "Running Status," above).
-
-
- CHANNEL MODES
-
- Synthesizers contain sound generation elements called voices. Voice
- assignment is the algorithmic process of routing Note On/Off data from the
- keyboard to the voices so that the musical notes are correctly played with
- accurate timing.
-
- When MIDI is implemented, the relationship between the sixteen available MIDI
- channels and the synthesizer's voice assignment must be defined. Several Mode
- messages are available for this purpose (see Table III). They are Omni
- (On/Off), Poly, and Mono. Poly and Mono are mutually exclusive, i.e., Poly
- Select disables Mono, and vice versa. Omni, when on, enables the receiver to
- receive Voice messages in all voice Channels without discrimination. When Omni
- is off, the receiver will accept Voice messages from only the selected Voice
- Channel(s). Mono, when on, restricts the assignment of Voices to just one
- voice per Voice Channel (Monophonic.) When Mono is off (=Poly On), any number
- of voices may be allocated by the Receiver's normal voice assignment algorithm
- (Polyphonic.)
-
- For a receiver assigned to Basic Channel "N," the four possible modes arising
- from the two Mode messages are:
-
- Mode Omni
-
-
- 1 On Poly Voice messages are received from all Voice
- channels and assigned to voices polyphonically.
-
- 2 On Mono Voice messages are received from all Voice
- Channels, and control only one voice,
- monophonically.
-
- 3 Off Poly Voice messages are received in Voice channel N
- only, and are assigned to voices polyphonically.
-
- 4 Off Mono Voice messages are received in Voice channels
- N thru N+M-1, and assigned monophonically to
- voices 1 thru M, respectively. The number of
- voices M is specified
- by the third byte of the Mono Mode Message.
-
- Four modes are applied to transmitters (also assigned to Basic Channel N).
- Transmitters with no channel selection capability will normally transmit on
- Basic Channel 1 (N=0).
-
- Mode Omni
-
-
- 1 On Poly All voice messages are transmitted in Channel N.
-
- 2 On Mono Voice messages for one voice are sent in Channel N.
-
- 3 Off Poly Voice messages for all voices are sent in Channel N.
-
- 4 Off Mono Voice messages for voices 1 thru M are
- transmitted in Voice Channels N thru N+M-1,
- respectively. (Single voice per channel).
-
- A MIDI receiver or transmitter can operate under one and only one mode at a
- time. Usually the receiver and transmitter will be in the same mode. If a
- mode cannot be honored by the receiver, it may ignore the message (and any
- subsequent data bytes), or it may switch to an alternate mode (usually Mode 1,
- Omni On/Poly).
-
- Mode messages will be recognized by a receiver only when sent in the Basic
- Channel to which the receiver has been assigned, regardless of the current
- mode. Voice messages may be received in the Basic Channel and in other
- channels (which are all called Voice Channels), which are related specifically
- to the Basic channel by the rules above, depending on which mode has been
- selected.
-
- A MIDI receiver may be assigned to one or more Basic Channels by default or by
- user control. For example, an eight-voice synthesizer might be assigned to
- Basic Channel 1 on power-up. The user could then switch the instrument to be
- configured as two four-voice synthesizers, each assigned to its own Basic
- Channel. Separate Mode messages would then be sent to each four-voice
- synthesizer, just as if they were physically separate instruments.
-
- POWER-UP DEFAULT CONDITIONS
-
- On power-up all instruments should default to Mode #1. Except for Note On/Off
- Status, all Voice messages should be disabled. Spurious or undefined
- transmissions must be suppressed.
-
-
- TABLE I
-
- SUMMARY OF STATUS BYTES
-
-
- STATUS # OF DATA DESCRIPTION
- D7---D0 BYTES
-
- Channel Voice Messages
-
- 1000nnnn 2 Note Off event
-
- 1001nnnn 2 Note On event (velocity=0: Note Off)
-
- 1010nnnn 2 Polyphonic key pressure/after touch
-
- 1011nnnn 2 Control change
-
- 1100nnnn 1 Program change
-
- 1101nnnn 1 Channel pressure/after touch
-
- 1110nnnn 2 Pitch bend change
-
-
- Channel Mode Messages
-
- 1011nnnn 2 Selects Channel Mode
-
-
- System Messages
-
- 11110000 ***** System Exclusive
-
- 11110sss 0 to 2 System Common
-
- 11111ttt 0 System Real Time
-
-
- NOTES:
- nnnn: N-1, where N = Channel #,
- i.e. 0000 is Channel 1.
- 0001 is Channel 2.
- .
- .
- .
- 1111 is Channel 16.
- *****: 0iiiiiii, data, ..., EOX
- iiiiiii: Identification
- sss: 1 to 7
- ttt: 0 to 7
-
-
- TABLE II
-
- CHANNEL VOICE MESSAGES
-
-
- STATUS DATA BYTES DESCRIPTION
-
-
- 1000nnnn 0kkkkkkk Note Off (see notes 1-4)
- 0vvvvvvv vvvvvvv: note off velocity
-
- 1001nnnn 0kkkkkkk Note On (see notes 1-4)
- 0vvvvvvv vvvvvvv - 0: velocity
- vvvvvvv = 0: note off
-
- 1010nnnn 0kkkkkkk Polyphonic Key Pressure (After-Touch)
- 0vvvvvvv vvvvvvv: pressure value
-
- 1011nnnn 0ccccccc Control Change
- 0vvvvvvv ccccccc: control # (0-121) (see notes 5-8)
- vvvvvvv: control value
-
- ccccccc = 122 thru 127: Reserved.
- (See Table III)
-
- 1100nnnn 0ppppppp Program Change
- ppppppp: program number (0-127)
-
- 1101nnnn 0vvvvvvv Channel Pressure (After-Touch)
- vvvvvvv: pressure value
-
- 1110nnnn 0vvvvvvv Pitch Bend Change LSB (see note 10)
- 0vvvvvvv Pitch Bend Change MSB
-
-
-
- NOTES:
-
- 1. nnnn: Voice Channel # (1-16, coded as defined in Table I notes)
-
- 2. kkkkkkk: note # (0 - 127)
- kkkkkkk = 60: Middle C of keyboard
-
- 0 12 24 36 48 60 72 84 96 108 120
- 127
- -----------------------------------------------------------------
- ac c c c c c
- c c
- |-------------- piano range -------------------|
-
-
- 3. vvvvvvv: key velocity
- A logarithmic scale would be advisable.
-
- 0 1 64
- 127
- -------------------------------------------------------------------
- off ppp pp p mp mf f
- ff fff
-
- vvvvvvv = 64: in case of no velocity sensors
- vvvvvvv = 0: Note Off, with velocity = 64
-
-
- 4. Any Note On message sent should be balanced by sending a Note Off message
- for that note in that channel at some later time.
-
-
- 5. ccccccc: control number
-
-
- ccccccc Description
-
-
- 0 Continuous Controller 0 MSB
- 1 Continuous Controller 1 MSB (MODULATION BENDER)
- 2 Continuous Controller 2 MSB
- 3 Continuous Controller 3 MSB
- 4-31 Continuous Controllers 4-31 MSB
- 32 Continuous Controller 0 LSB
- 33 Continuous Controller 1 LSB (MODULATION BENDER)
- 34 Continuous Controller 2 LSB
- 35 Continuous Controller 3 LSB
- 36-63 Continuous Controllers 4-31 LSB
- 64-95 Switches (On/Off)
- 96-121 Undefined
- 122-127 Reserved for Channel Mode messages (see Table III).
-
-
- 6. All controllers are specifically defined by agreement of the MIDI
- Manufacturers Association (MMA) and the Japan MIDI Standards Committee (JMSC).
- Manufacturers can request throught the MMA or JMSC that logical controllers be
- assigned to physical ones as necessary. The controller allocation table must
- be provided in the user's operation manual.
-
- 7. Continuous controllers are divided into Most Significant and Least
- Significant Bytes. If only seven bits of resolution are needed for any
- particular controllers, only the MSB is sent. It is not necessary to send the
- LSB. If more resolution is needed, then both are sent, first the MSB, then the
- LSB. If only the LSB has changed in value, the LSB may be sent without
- re-sending the MSB.
-
- 8. vvvvvvv: control value (MSB)
-
- (for controllers)
-
- 0
- 127
- |-----------------------------------------------------------------|
- min
- max
-
- (for switches)
-
- 0
- 127
- | - - - - - - - -
- - - - |
- off
- on
-
- Numbers 1 through 126, inclusive, are ignored.
-
-
- 9. Any messages (e.g. Note On), which are sent successively under the same
- status, can be sent without a Status byte until a different Status byte is
- needed.
-
- 10. Sensitivity of the pitch bender is selected in the receiver. Center
- position value (no pitch change) is 2000H, which would be transmitted
- EnH-00H-40H.
- TABLE III
-
- CHANNEL MODE MESSAGES
-
-
- STATUS DATA BYTES DESCRIPTION
-
-
- 1011nnnn 0ccccccc Mode Messages
- 0vvvvvvv
- ccccccc = 122: Local Control
- vvvvvvv = 0, Local Control Off
- vvvvvvv = 127, Local Control On
-
- ccccccc = 123: All Notes Off
- vvvvvvv = 0
-
- ccccccc = 124: Omni Mode Off (All Notes Off)
- vvvvvvv = 0
-
- ccccccc = 125: Omni Mode On (All Notes Off)
- vvvvvvv = 0
-
- ccccccc = 126: Mono Mode On (Poly Mode Off)
- (All Notes Off)
- vvvvvvv = M, where M is the number of channels.
- vvvvvvv = 0, the number of channels equals the number
- of voices in the receiver.
-
- ccccccc = 127: Poly Mode On (Mono Mode Off)
- vvvvvvv = 0 (All Notes Off)
-
-
- NOTES:
-
- 1. nnnn: Basic Channel # (1-16, coded as defined in Table I)
-
- 2. Messages 123 thru 127 function as All Notes Off messages. They will turn
- off all voices controlled by the assigned Basic Channel. Except for message
- 123, All Notes Off, they should not be sent periodically, but only for a
- specific purpose. In no case should they be used in lieu of Note Off commands
- to turn off notes which have been previously turned on. Therefore any All
- Notes Off command (123-127) may be ignored by receiver with no possibility of
- notes staying on, since any Note On command must have a corresonding specific
- Note Off command.
-
- 3. Control Change #122, Local Control, is optionally used to interrupt the
- internal control path between the keyboard, for example, and the
- sound-generating circuitry. If 0 (Local Off mesage) is received, the path is
- disconnected: the keyboard data goes only to MIDI and the sound-generating
- circuitry is controlled only by incoming MIDI data. If a 7FH (Local On
- message) is received, normal operation is restored.
-
- 4. The third byte of "Mono" specifies the number of channels in which
- Monophonic Voice messages are to be sent. This number, "M", is a number
- between 1 and 16. The channel(s) being used, then, will be the current Basic
- Channel (=N) thru N+M-1 up to a maximum of 16. If M=0, this is a special case
- directing the receiver to assign all its voices, one per channel, from the
- Basic Channel N through 16.
-
-
- TABLE IV
-
- SYSTEM COMMON MESSAGES
-
-
- STATUS DATA BYTES DESCRIPTION
-
-
- 11110001 Undefined
-
- 11110010 Song Position Pointer
- 0lllllll lllllll: (Least significant)
- 0hhhhhhh hhhhhhh: (Most significant)
-
- 11110011 0sssssss Song Select
- sssssss: Song #
-
- 11110100 Undefined
-
- 11110101 Undefined
-
- 11110110 none Tune Request
-
- 11110111 none EOX: "End of System Exclusive" flag
-
-
- 1. Song Position Pointer: Is an internal register which holds the number of
- MIDI beats (1 beat = 6 MIDI clocks) since the start of the song. Normally it
- is set to 0 when the START switch is pressed, which starts sequence playback.
- It then increments with every sixth MIDI clock receipt, until STOP is pressed.
- If CONTINUE is pressed, it continues to increment. It can be arbitrarily
- preset (to a resolution of 1 beat) by the SONG POSITION POINTER message.
-
- 2. Song Select: Specifies which song or sequence is to be played upon
- receipt of a Start (Real-Time) message.
-
- 3. Tune Request: Used with analog synthesizers to request them to tune their
- oscillators.
-
- 4. EOX: Used as a flag to indicate the end of a System Exclusive
- transmission (see Table VI).
-
-
- TABLE V
-
- SYSTEM REAL TIME MESSAGES
-
-
- STATUS DATA BYTES DESCRIPTION
-
- 11111000 Timing Clock
- 11111001 Undefined
- 11111010 Start
- 11111011 Continue
- 11111100 Stop
- 11111101 Undefined
- 11111110 Active Sensing
- 11111111 System Reset
-
-
- NOTES:
-
- 1. The System Real Time messages are for synchronizing all of the system in
- real time.
-
- 2. The System Real Time messages can be sent at any time. Any messages which
- consist of two or more bytes may be split to insert Real Time messages.
-
- 3. Timing clock (F8H)
- The system is synchronized with this clock, which is sent at a rate of 24
- clocks/quarter note.
-
- 4. Start (from the beginning of song) (FAH)
- This byte is immediately sent when the PLAY switch on the master (e.g.
- sequencer or rhythm unit) is pressed.
-
- 5. Continue (FBH)
- This is sent when the CONTINUE switch is hit. A sequence will continue at the
- time of the next clock.
-
- 6. Stop (FCH)
- This byte is immediately sent when the STOP switch is hit. It will stop the
- sequence.
-
- 7. Active Sensing (FEH)
- Use of this message is optional, for either receivers or transmitters. This
- is a "dummy" Status byte that is sent every 300 ms (max), whenever there is no
- other activity on MIDI. The receiver will operate normally if it never
- receives FEH. Otherwise, if FEH is ever received, the receiver will expect to
- receive FEH or a transmission of any type every 300 ms (max). If a period of
- 300 ms passes with no activity, the receiver will turn off the voices and
- return to normal operation.
-
- 8. System Reset (FFH)
- This message initializes all of the system to the condition of just having
- turned on power. The system Reset message should be used sparingly, preferably
- under manual command only. In particular, it should not be sent automatically
- on power up.
-
-
- TABLE VI
-
- SYSTEM EXCLUSIVE MESSAGES
-
-
- STATUS DATA BYTES DESCRIPTION
-
-
- 11110000 Bulk dump etc.
- 0iiiiiii iiiiiii: identification
- .
- (0*******)
- . Any number of bytes may be sent here, for any
- purpose, as long as they all have a zero in the most significant bit.
- (0*******)
- .
- 11110111 EOX: "End of System Exclusive"
-
-
- NOTES:
-
- 1. iiiiiii: identification ID (0-127)
-
- 2. All bytes between the System Exclusive Status byte and EOX or the next
- Status byte must have zeroes in the MSB.
-
- 3. The ID number can be obtained from the MMA or JMSC.
-
- 4. In no case should other Status or Data bytes (except Real-Time) be
- interleaved with System Exclusive, regardless of whether or not the ID code is
- recognized.
-
- 5. EOX or any other Status byte, except Real-Time, will terminate a System
- Exclusive message, and should be sent immediately at its conclusion.
-
- **** END of Spec. ****
-
- -------------------------------------------------
-
- From: Chris_Kilgour@mindlink.bc.ca (Chris Kilgour)
- Subject: Re: Serial/parallel <-> MIDI interface schematics?
- Date: Sat, 04 Jun 94 09:19:27 -0700 (PDT)
-
- URADU@utcvm.utc.edu writes:
- > I'm not sure if this is the right spot for such requests, but I'm looking
- > for circuit diagrams for a MIDI interface for either the serial or
- > parallel port (NOT internal card - I need it for a notebook). I've been
- > hunting around for some schematics, or even more general info, but so far
- > nothing! Any help would be appreciated.
- > Paul
-
- A simple schematic probably does not exist because MIDI is a serial data
- stream of 31.25 kbps. Of course, your standard serial port does not talk
- this speed. If you want to use the serial port directly, you need to
- operate at a higher baud rate and use an external buffer, which requires
- some intelligence. Likewise, for a parallel interface you would need a
- UART, baud generator, etc.
-
- My solution? I changed the crystal in my serial port from 1.8432 MHz to
- 1.000 MHz. Now when I ask for 57.6 kbps, it operates at 31.25 kbps! Just
- a simple level translation to the MIDI current loop is required and !bang!,
- you have a MIDI interface. It works well, but (unfortunately), there is no
- software out there for it. I had to write my own .mid file player, but
- that worked too!
-
- - Christopher D. Kilgour Chris_Kilgour@mindlink.bc.ca
-
- --------------------------------------------------------------------
- I might remind him that a 4MHz would do as well and requires asking for
- only a 14.4 kbps rate to get 31.25 kbps. Or roll your own. MIDI bps is
- 31.25kbps, which is just 1MHz/32 ! To figure the usual bps rates for RS232C,
- just divide 1.8432 MHz by binary powers! The UART uses a divisor to set the
- bit rate. And 5mA current loops from RS232C are found in lots of MIDI
- books, and there are a couple chips out there for RS422 that work fine!
- -Steve Walz
-
-